-
Notifications
You must be signed in to change notification settings - Fork 8k
Mysqli: fix missing error for invalid mysqli_options() option #20971
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…cting report_mode
…cting report_mode
…cting report_mode
…cting report_mode
…cting report_mode
iluuu1994
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From what I can see (as somebody who doesn't maintain this code), most arguments are validated without the MYSQLI_REPORT_ERROR guard, and throw a zend_argument_value_error().
But somebody who does maintain this should confirm.
Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com>
Co-authored-by: Ilija Tovilo <ilija.tovilo@me.com>
…cting report_mode
- if (MyG(report_mode) & MYSQLI_REPORT_ERROR) {
zend_value_error("mysqli_options(): Invalid option %d", (int)mysql_option);Do we need to remove |
|
Somebody else should review this. /cc @Girgias @SakiTakamachi |
|
First of all, I don't know if this should be an error condition. I guess it kind of makes sense. But as you can see in the test, no message was the behaviour by design. The error should be without the guard and without the function name in the message. It seems to me like you have also put it in the wrong place. Judging by the message and the test, you wanted to put it in the switch statement after that. The message isn't very descriptive either. What does it mean "invalid option"? What should the user do differently? |
…cting report_mode
…cting report_mode
…cting report_mode
|
Changed the error message to |
Co-authored-by: Kamil Tekiela <tekiela246@gmail.com>
Co-authored-by: Kamil Tekiela <tekiela246@gmail.com>
…cting report_mode
Co-authored-by: Kamil Tekiela <tekiela246@gmail.com>
|
Thank you @kamil-tekiela kamil-tekiela |
|
@iluuu1994 Are you ok with how this looks now? |
…cting report_mode
iluuu1994
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not a codeowner, but yes, LGTM now. Thanks @arshidkv12!
…cting report_mode
ext/mysqli/tests/gh20968.phpt
Outdated
| @@ -0,0 +1,27 @@ | |||
| --TEST-- | |||
| Bug #20968 mysqli_options() with invalid option triggers ValueError | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Bug #20968 mysqli_options() with invalid option triggers ValueError | |
| GH-20968 mysqli_options() with invalid option triggers ValueError |
We use Bug #xxxxx notation to refer to old bugsnet bugs.
ext/mysqli/tests/gh20968.phpt
Outdated
|
|
||
| $mysqli = new mysqli($host, $user, $passwd, $db, $port, $socket); | ||
|
|
||
| $value = $mysqli->options(10, 'invalid_option'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add a try catch here and check the exception message, we don't care about the stack trace.
| expected_type = mysqli_options_get_option_zval_type(mysql_option); | ||
| if (expected_type == IS_NULL) { | ||
| zend_argument_value_error(ERROR_ARG_POS(2), "must be one of predefined options"); | ||
| RETURN_THROWS(); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We normally list the available options, and if there are too many we at least provide a prefix for the error eg. MYSQLI_BLAH_X
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought about that too, but there isn't any common pattern between them. One of the values doesn't even have a corresponding constants.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That seems kinda bad that one of the options doesn't have a constant?
As future scope, would it make sense to have an Enum of MySQLi options? As that would make the type checking and value validation easy.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it is. Maybe we should add the constant. Enums would definitely be better but it would be a breaking change difficult for cross-version compatibilty.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it is. Maybe we should add the constant. Enums would definitely be better but it would be a breaking change difficult for cross-version compatibilty.
It would be possible to assign the enum case as the constant value, or support int|Enum. But I think already adding the missing constant is the big thing.
ext/mysqli/tests/gh20968.phpt
Outdated
| @@ -0,0 +1,27 @@ | |||
| --TEST-- | |||
| Bug #20968 mysqli_options() with invalid option triggers ValueError | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Bug #20968 mysqli_options() with invalid option triggers ValueError | |
| Bug #20968 mysqli_options() with invalid option should triggers ValueError |
The phrasing of the bug title seems to imply that an invalid option MUST NOT thow a ValueError, which is the complete opposite of what is being done.
…cting report_mode
#20968